<?php
// https://leetcode-cn.com/problems/valid-parentheses/

class Solution {

    /**
     * @param String $s
     * @return Boolean
     */
    public static function isValid($s) {
        $symbol_stack = array();
        $symbol_mapping = array(
            '(' => ')',
            '{' => '}',
            '[' => ']',
        );
        $str_len = strlen($s);
        // 奇数 一定不满足
        if ($str_len % 2 != 0) {
            return false;
        }
        for($i=0; $i<$str_len; $i++) {
            // 遇到 （ [ { 入栈
            if (isset($symbol_mapping[$s[$i]])) {
                array_unshift($symbol_stack, $s[$i]);
                continue;
            }
            // $symbol_stack为空代表 （ 【 { 比 ) ] }后出现，不满足条件
            // 遇到) ] }和栈顶元素比较是否匹配
            if (empty($symbol_stack) || $symbol_stack[0] != self::leftOf($s[$i])) {
                return false;
            }
            // 匹配出栈
            array_shift($symbol_stack);
        }
        // 判断栈是否为空
        return empty($symbol_stack);
    }

    public static function leftOf($c)
    {
        $symbol_mapping = array(
            '(' => ')',
            '{' => '}',
            '[' => ']',
        );

        return array_flip($symbol_mapping)[$c];
    }
}

var_dump(Solution::isValid('"([]())"'));